[小ネタ]S3の署名付きURLのダウンロードをIPアドレスで制限できないか試してみた
こんにちは!コンサル部のinomaso(@inomasosan)です。
S3の署名付きURLを使用すると、プライベートなオブジェクトかバケットへのアップロードかダウンロードが可能になります。
よくあるユースケースとしてファイルの配布等が思いつくのですが、URLを知られると誰でもファイルにアクセスできてしまいます。
そこで今回は、署名付きURLのダウンロードでIPアドレス制限可能なのかを試してみました。
最初にまとめ
- バケットポリシーでIPアクセス制限することで、署名付きURLでも特定のIPアドレスのみダウンロードさせることが可能。
やってみた
S3バケットポリシー設定
まずはデフォルトの設定で空のS3バケットを作成し、検証用のファイルをアップロードしておきます。
作成したS3バケットをクリックし、アクセス許可
タブのバケットポリシー
で編集ボタンをクリックします。
ポリシーの入力画面が開いたら以下のポリシーを入力します。
{バケット名}
は先ほど作成したS3バケット名を、{IPアドレス(CIDR表記)}
にはダウンロードを許可するIPアドレスに変更してください。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "IPAllow", "Effect": "Deny", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::{バケット名}/*", "Condition": { "NotIpAddress": { "aws:SourceIp": "{IPアドレス(CIDR表記)}>" } } } ] }
署名付きURLでのダウンロード検証
AWSマネジメントコンソールで簡単にダウンロード用の署名付きURLを作成できるため、以下を参考にURLを生成します。
まずは、先ほどバケットポリシーで許可したIPアドレスでダウンロードできるか試してみました。 結果として特に問題なくダウンロードできたことを確認できました。
次に許可していないIPアドレスからのダウンロードの挙動を確認していきます。
結果はAccessDeniedということで、許可していないIPアドレスからはダウンロードできないことを確認できました。
参考
まとめ
S3署名付きURLによるダウンロードをIPアドレスで制限できるのか気になったので、簡単に検証してみました。
この記事が、どなたかのお役に立てば幸いです。それでは!